package tests.mocks;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;

import vuelo.Vuelo;
import vuelo.VueloConEscala;
import vuelo.VueloDirecto;
import aerolinea.Aerolinea;
import aerolinea.TodasLasAerolineas;
import busqueda.Busqueda;

public class TodasLasAerolineasMock extends TodasLasAerolineas {
	
	private static TodasLasAerolineasMock instance = null;
	
	public static TodasLasAerolineasMock getInstance() {
		if(instance == null){
			instance = new TodasLasAerolineasMock();
		}
		return instance;
	}
	
	public Collection<Vuelo> buscarVuelos(Busqueda busqueda){
		
		Collection<Vuelo> colVuelos = new ArrayList<Vuelo>();
		
		for (Aerolinea aerolinea: this.getAerolineas()){
			
			colVuelos.addAll(busqueda.filtrar(busqueda.buscarVuelos(aerolinea)));		
		}
		
		return this.mockearVuelos(colVuelos);
	}

	public Collection<Vuelo> mockearVuelos(Collection<Vuelo> vuelos){
		Collection<Vuelo> vuelosMockeados = new ArrayList<Vuelo>();
		for (Vuelo vuelo: vuelos) {
			//Code smell
			if(vuelo instanceof VueloDirecto){
				vuelosMockeados.add(new VueloDirectoMock((VueloDirecto)vuelo));
			}else{
				vuelosMockeados.add(new VueloConEscalaMock((VueloConEscala)vuelo));
			}
		}
		return vuelosMockeados;
	}
	
	
	

}
